home *** CD-ROM | disk | FTP | other *** search
/ Aminet 38 / Aminet 38 (2000)(Schatztruhe)[!][Aug 2000].iso / Aminet / misc / math / libalgo.lha / algomath / src / priarrab.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-30  |  1.3 KB  |  91 lines

  1. /* create an array of prime numbers between two given numbers
  2.    starting_prime and end_prime. store in p the number of primes found*/
  3.  
  4. #include "defs.h"
  5.  
  6. int* am_primes_between(int starting_prime,int end_prime,int *p)
  7. {
  8.     int n=0 ,y=0,a[2],h=0;
  9.     int* feld = 0,x=0;
  10.  
  11.     if((feld = (int*)malloc(100 * sizeof(int)))==NULL)
  12.         return 0;
  13.  
  14.     if(starting_prime<0)
  15.         starting_prime = -starting_prime;
  16.  
  17.     if(end_prime<0)
  18.         end_prime = -end_prime;
  19.  
  20.     if(starting_prime>end_prime){
  21.         x=end_prime;
  22.         end_prime=starting_prime;
  23.         starting_prime=x;
  24.         x=0;
  25.         }
  26.  
  27.     x=starting_prime%6;
  28.  
  29.     if(starting_prime<5){
  30.             if(starting_prime<3){    
  31.                 feld[0]=2;
  32.                 feld[1]=3;
  33.                 n=2;
  34.                 h=2;
  35.                 }
  36.             else if(starting_prime==3){
  37.                 feld[0]=3;
  38.                 n=1;
  39.                 h=1;
  40.                 }
  41.             x=5;
  42.             a[0]=2;
  43.             a[1]=4;
  44.         }
  45.     else if(x==1){
  46.         x=starting_prime;
  47.         a[0]=4;
  48.         a[1]=2;
  49.         n = 0;
  50.         }
  51.     else if(x==5){
  52.         x=starting_prime;
  53.         a[0]=2;
  54.         a[1]=4;
  55.         n = 0;
  56.         }
  57.     else if (x==0){
  58.         x=starting_prime+1;
  59.         a[0]=4;
  60.         a[1]=2;
  61.         n = 0;
  62.         }
  63.     else{
  64.         x=starting_prime+5-x;
  65.         a[0]=2;
  66.         a[1]=4;
  67.         n = 0;
  68.         }
  69.  
  70.  
  71.     while(x <= end_prime)
  72.     {
  73.         if(am_isprime(x)){
  74.             feld[n++] = x;
  75.             h++;
  76.             if(h>99){
  77.                 if((feld = (unsigned int*)realloc(feld,(n+100) * sizeof(unsigned int)))==NULL)
  78.                     return 0;
  79.                 h=0;
  80.             }
  81.         }
  82.         x=x+a[y];
  83.         y++;
  84.         if(y>1)
  85.             y=0;
  86.     }
  87.     *p=n;
  88.     feld[n]=0;
  89.     return feld;
  90. }
  91.